<template>
    <div class="body">
        <div class="content">
        <div class="left">
            <img :src="getIcon('img2.png')" ref="peopleRef" class="people p-animtion" alt="people">
            <img :src="getIcon('img1.png')" ref="sphereRef" class="sphere s-animtion" alt="sphere">
        </div>
        <div class="right">
            <!-- <div class="top">
                <div class="top-item">
                    <span class="top-text">Home</span>
                </div>
                <div class="top-item">
                    <span class="top-text">Register</span>
                </div>
                <div class="top-item">
                    <span class="top-text">Contact Us</span>
                </div>
                <div class="top-item">
                    <span class="top-text">Help</span>
                </div>
            </div> -->
            <div class="form-wrappepr">
                <h1>知识星球</h1>
                <input type="text" class="inputs user" ref="login_username" placeholder="请输入用户名" v-model="form.username">
                <input type="password" class="inputs pwd" ref="login_password" placeholder="请输入密码" v-model="form.password">
                <div>
                    <div style="display:flex;justify-content: space-around;align-items: center; width: 100%; height: auto;margin: 10px 0;" >
                      <input  style="background-color: rgb(210 223 237); margin: 0;margin-right: 5px; padding: 0 20px;flex: 1; height: 60px; border: 0;border-radius: 10px; outline: none;" type="text" class="input-field" ref="login_captcha" placeholder="请输入验证码"  v-model="form.captcha"/>
                      <div style="height: 39px; " class="captchaCode" v-html="code" @click="getCode()">
                      </div>
                    </div>
                </div>
                <span class="tips" @click="()=>{router.push({path:'/register'})}">没有帐号，去注册</span>
                <button @click="verificate()">登录</button>
                <div class="other-login">
                    <div class="divider">
                        <span class="line"></span>
                        <span class="divider-text">or continue with</span>
                        <span class="line"></span>
                    </div>
                    <div class="other-login-wrapper">
                        <div class="other-login-item">
                            <img :src="getIcon('QQ.png')" alt="QQ">
                        </div>
                        <div class="other-login-item">
                            <img :src="getIcon('WeChat.png')" alt="WeChat">
                        </div>
                    </div>
                </div>
            </div>

        </div>
    </div>
    </div>
  
</template>

<script setup lang="ts">
import {onMounted, ref,reactive} from 'vue'
import { useAuthStore,useUserInfoStore } from '@/store/main'
import {useRouter} from 'vue-router'
import { useLogin,useUserList } from './Login';
import requestList from '@/service/request';
import { getItem } from '@/utils/local';
import { resolve } from 'path';



// 状态
const authStore = useAuthStore()
const userInfoStore = useUserInfoStore()
const router = useRouter()

// 获取图片路径
const getIcon = (name: string)=>{
    return new URL(`../../../../src/assets/img/${name}`, import.meta.url).href;
}

// 监听动画
const peopleRef = ref()
const sphereRef = ref()
const watch =() => {
    peopleRef.value.addEventListener('animationend', function () {
        peopleRef.value.classList.remove('p-animtion');
        peopleRef.value.classList.add('p-other-animtion')
    });
    sphereRef.value.addEventListener('animationend', function () {
        sphereRef.value.classList.remove('s-animtion');
        sphereRef.value.classList.add('s-other-animtion')
    });	
}

const form:any = reactive({
    username:'cbiu',
    password:'cbiu0754',
    captcha:'',
    captcha_token:''
})


let captchaText = ''
const code = ref('')
const getCode = async () => {
    const res = await requestList.captchaApi()
    if(res.code === 1){
       code.value =( res.data as any).code
       captchaText = ( res.data as any).text
       form.captcha_token = ( res.data as any).token
    }
}
const login_username = ref()
const login_password = ref()
const login_captcha = ref()
const verificate = ()=>{
    if(form.username.trim() == ''){
        window.$message.warning('请输入用户名')
          login_username.value && (login_username.value as any).focus();
          return
        }
        if(form.username.trim().length < 4 || form.username.trim().length > 20){
        window.$message.warning('用户名长度在4-20以内')
          
          login_username.value && (login_username.value as any).focus()
          return
        }
        if(form.password.trim() == ''){
        window.$message.warning('请输入密码')
           
          login_username.value && (login_password.value as any).focus();
          return
        }
        if(form.captcha.trim() == ''){
        window.$message.warning('请输入验证码')
            
          login_username.value && (login_captcha.value as any).focus();
          return
        }
        if(form.captcha.trim()!= captchaText){
        window.$message.warning('验证码不正确')
          login_username.value && (login_captcha.value as any).focus();
          return
        }
        postSent()
}

const postSent = async () =>{
    await authStore.login(form)
    await userInfoStore.getUserInfo()
    router.push('/home')
}

onMounted(()=>{
    watch()
    getCode()
})

</script>

<style scoped lang="scss">

.body {
    margin: 0;
    min-height: 100vh;
    background-color: #abc6f8;
    background-image: radial-gradient(closest-side, rgb(255, 255, 255), rgba(235, 105, 78, 0)),
        radial-gradient(closest-side, rgb(250, 203, 203), rgba(243, 11, 164, 0)),
        radial-gradient(closest-side, rgb(237, 252, 202), rgba(254, 234, 131, 0)),
        radial-gradient(closest-side, rgb(197, 248, 241), rgba(170, 142, 245, 0)),
        radial-gradient(closest-side, rgb(206, 200, 243), rgba(248, 192, 147, 0));
    background-size: 130vmax 130vmax, 80vmax 80vmax, 90vmax 90vmax, 110vmax 110vmax, 90vmax 90vmax;
    background-position: -80vmax -80vmax, 60vmax -30vmax, 10vmax 10vmax, -30vmax -10vmax, 50vmax 50vmax;
    background-repeat: no-repeat;
    animation: 10s movement linear infinite;
}

.body::after {
    content: "";
    display: block;
    position: fixed;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
}

.content {
    width: 90vw;
    height: 90vh;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    z-index: 1;
    border-radius: 30px;
    background: rgba(255, 255, 255, 0.6);
    border: 1px solid rgba(255, 255, 255, 0.18);
    display: flex;
    // overflow: hidden;
    .left {
        flex: 1;
        position: relative;
        .sphere {
            position: absolute;
            left: 30%;
            width: 90%;
            z-index: 1;
            animation: sphereAnimation 2s;
            animation-fill-mode: forwards;
            animation-timing-function: ease;
        }
        .people {
            position: absolute;
            left: -50%;
            top: 20%;
            width: 70%;
            // height: 100px;
            z-index: 2;
        }
        .p-animtion {
            animation: peopleAnimation 2s;
            animation-fill-mode: forwards;
            animation-timing-function: ease;
        }
        .p-other-animtion {
            animation-name: pOtherAnimation; // 动画名称
            animation-direction: alternate; // 动画在奇数次（1、3、5...）正向播放，在偶数次（2、4、6...）反向播放。
            animation-timing-function: linear; // 动画执行方式，linear：匀速；ease：先慢再快后慢；ease-in：由慢速开始；ease-out：由慢速结束；ease-in-out：由慢速开始和结束；
            animation-iteration-count: infinite; //  动画播放次数，infinite：一直播放
            animation-duration: 3s; // 动画完成时间
        }
        .s-animtion {
            animation: sphereAnimation 2s;
            animation-fill-mode: forwards;
            animation-timing-function: ease;
        }
        .s-other-animtion {
            animation-name: sOtherAnimation; // 动画名称
            animation-direction: alternate; // 动画在奇数次（1、3、5...）正向播放，在偶数次（2、4、6...）反向播放。
            animation-timing-function: linear; // 动画执行方式，linear：匀速；ease：先慢再快后慢；ease-in：由慢速开始；ease-out：由慢速结束；ease-in-out：由慢速开始和结束；
            animation-iteration-count: infinite; //  动画播放次数，infinite：一直播放
            animation-duration: 3s; // 动画完成时间
        }
    }
    .right {
        flex: 1;
        position: relative;
        z-index: 12;
        .top {
            width: 80%;
            margin-left: 38px;
            color: rgb(51, 52, 124);
            font-size: 20px;
            font-weight: 600;
            font-family: "Century Gothic", Times, serif;
            position: absolute;
            left: 50%;
            top: 5%;
            transform: translate(-50%, 0);
            .top-item {
                float: left;
                width: 150px;
                height: 40px;
                line-height: 40px;
                text-align: center;
                margin-right: 10px;
                transition: 0.5s;
                &:hover {
                    border: 0;
                    background-color: #fff;
                    border-radius: 50px;
                    cursor: pointer;
                    box-shadow: -20px 10px 32px 1px rgba(182, 183, 185, 0.37);
                }
            }
        }
        .form-wrappepr {
            width: 60%;
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%, -50%);
            text-align: right;
            h1 {
                float: left;
                font-family: "Century Gothic", Times, serif;
                margin: 30px 0;
                // color: rgb(68,96,241);
            }
            .inputs {
                display: block;
                width: 100%;
                height: 70px;
                margin: 30px 0;
                border-radius: 10px;
                border: 0;
                background-color: rgb(210 223 237);
                color: rgb(80, 82, 84);
                font-family: "Century Gothic", Times, serif;
                outline: none;
                padding: 20px;
                box-sizing: border-box;
                font-size: 20px;
            }
            .tips {

                display: block;
                margin-top: 15px;
                color: rgb(160, 170, 182);
                cursor: pointer;
            }
            button {
                width: 100%;
                height: 50px;
                background-color: rgb(68, 96, 241);
                border-radius: 10px;
                font-size: 15px;
                color: #fff;
                border: 0;
                font-weight: 600;
                margin: 30px 0;
                cursor: pointer;
                box-shadow: -20px 28px 42px 0 rgba(62, 145, 255, 0.37);
                font-family: "Century Gothic", Times, serif;
            }
            .other-login {
                .divider {
                    width: 100%;
                    margin: 20px 0;
                    text-align: center;
                    display: flex;
                    align-items: center;
                    justify-content: space-between;
                    .line {
                        display: inline-block;
                        max-width: 35%;
                        width: 35%;
                        flex: 1;
                        height: 1px;
                        background-color: rgb(162, 172, 185);
                    }
                    .divider-text {
                        vertical-align: middle;
                        margin: 0px 20px;
                        // line-height: 0px;
                        display: inline-block;
                        width: 150px;
                        color: rgb(162, 172, 185);
                        white-space: normal;
                    }
                }
                .other-login-wrapper {
                    width: 100%;
                    display: flex;
                    justify-content: center;
                    align-items: center;
                    .other-login-item {
                        width: 70px;
                        // border: 1px solid rgb(162, 172, 185);
                        padding: 10px;
                        text-align: center;
                        border-radius: 10px;
                        cursor: pointer;
                        font-weight: 600;
                        color: rgb(51, 49, 116);
                        margin: 0 10px;
                        transition: 0.4s;
                        img {
                            width: 40px;
                            height: 40px;
                            vertical-align: middle;
                        }
                        span {
                            vertical-align: middle;
                        }

                        &:hover {
                            width: 80px;
                            height: 50%;
                            background-color: #fff;
                            border: 0;
                            box-shadow: -20px 10px 32px 1px rgba(182, 183, 185, 0.37);
                        }
                    }
                }
            }
        }
    }
}

@keyframes movement {
    0%,
    100% {
        background-size: 130vmax 130vmax, 80vmax 80vmax, 90vmax 90vmax, 110vmax 110vmax, 90vmax 90vmax;
        background-position: -80vmax -80vmax, 60vmax -30vmax, 10vmax 10vmax, -30vmax -10vmax, 50vmax 50vmax;
    }
    25% {
        background-size: 100vmax 100vmax, 90vmax 90vmax, 100vmax 100vmax, 90vmax 90vmax, 60vmax 60vmax;
        background-position: -60vmax -90vmax, 50vmax -40vmax, 0vmax -20vmax, -40vmax -20vmax, 40vmax 60vmax;
    }
    50% {
        background-size: 80vmax 80vmax, 110vmax 110vmax, 80vmax 80vmax, 60vmax 60vmax, 80vmax 80vmax;
        background-position: -50vmax -70vmax, 40vmax -30vmax, 10vmax 0vmax, 20vmax 10vmax, 30vmax 70vmax;
    }
    75% {
        background-size: 90vmax 90vmax, 90vmax 90vmax, 100vmax 100vmax, 90vmax 90vmax, 70vmax 70vmax;
        background-position: -50vmax -40vmax, 50vmax -30vmax, 20vmax 0vmax, -10vmax 10vmax, 40vmax 60vmax;
    }
}
@keyframes sphereAnimation {
    0% {
        width: 10%;
    }
    100% {
        width: 90%;
        transform: translate(-30%, 5%);
    }
}
@keyframes peopleAnimation {
    0% {
        width: 40%;
    }
    100% {
        width: 70%;
        transform: translate(90%, -10%);
    }
}

@keyframes pOtherAnimation {
    0% {
        transform: translate(90%, -10%);
    }
    100% {
        transform: translate(90%, -15%);
    }
}
@keyframes sOtherAnimation {
    0% {
        transform: translate(-30%, 5%);
    }
    100% {
        transform: translate(-30%, 10%);
    }
}

</style>
